﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using Entidades;
using System.Collections;

namespace CapaDatos.Adapters
{
   public class ProyectoDidacticoAdapter
    {
       
        BDRinconLuzEntities contexto;

        public ProyectoDidacticoAdapter()
        {
            contexto = RinconLuzContext.Context;
        }

        public ProyectoDidacticoAdapter(string edicion)
        {
            contexto = RinconLuzContext.ContextNew;
        }

        public void Agregar(ProyectoDidactico entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && entidad.ChangeTracker.State == ObjectState.Added)
            {
                contexto.RegistrarCambios(entidad);
                contexto.RealizarCambios();
            }
        }

        public void Eliminar(ProyectoDidactico entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            IObjectSet<ProyectoDidactico> objectSet = contexto.CrearSet<ProyectoDidactico>();

            objectSet.Attach(entidad);
            objectSet.DeleteObject(entidad);
        }



        public void Modificar(ProyectoDidactico entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && (entidad.ChangeTracker.State & ObjectState.Deleted) != ObjectState.Deleted)
            {
                entidad.MarkAsModified();
            }

            contexto.SaveChanges();
        }


        public IEnumerable<ProyectoDidactico> Obtener()
        {
            return contexto.CrearSet<ProyectoDidactico>();
        }

        public ProyectoDidactico ObtenerEntidad(string nombre)
        {

             var ExisteEntidad = (from v in contexto.ProyectoDidactico
                                  where v.NombreProyectoDidactico.Contains(nombre) &&
                                           v.Eliminado != true
                           select v).Any();

             if (ExisteEntidad == true)
             {
                 var Entidad = (from v in contexto.ProyectoDidactico
                                where v.NombreProyectoDidactico.Contains(nombre) &&
                                    v.Eliminado != true
                                select v).First();
                 return Entidad;
             }
             else
             {
                 ProyectoDidactico entidad = null;
                 return entidad;
             }
        }

        public bool VerificarNombreDuplicado(string nombre, Guid id)
        {
            if (id == Guid.Empty)
            {
                var ExisteEntidad = (from v in contexto.ProyectoDidactico
                                     where v.NombreProyectoDidactico.Trim().ToLower() == nombre.Trim().ToLower() &&
                                    v.Eliminado != true
                                     select v).Any();

                return ExisteEntidad;
            }
            else
            {
                var ExisteEntidad = (from v in contexto.ProyectoDidactico
                                     where v.NombreProyectoDidactico.Trim().ToLower() == nombre.Trim().ToLower() && v.IdProyectoDidactico != id &&
                                    v.Eliminado != true
                                     select v).Any();

                return ExisteEntidad;

            }
        }


        public List<ViewEntity> ObtenerCoincidenciasPorNombre(string nombre)
        {
            List<ViewEntity> ListaFinal = new List<ViewEntity>();

            var ExisteEntidad = (from v in contexto.ProyectoDidactico
                                 where v.NombreProyectoDidactico.Contains(nombre) &&
                                          v.Eliminado != true
                           select v).Any();

             if (ExisteEntidad == true)
             {
                 var Entidades = (from v in contexto.ProyectoDidactico
                                  where v.NombreProyectoDidactico.Contains(nombre) &&
                                      v.Eliminado != true
                                select v).ToList();
                 
                if (Entidades.Count > 0)
                {

                    foreach (var item in Entidades)
                    {
                        ListaFinal.Add(new ViewEntity(item.IdProyectoDidactico, item.NombreProyectoDidactico));
                    }

                }
             
                          
             }
             

            return ListaFinal;
        }

        public ProyectoDidactico ObtenerEntidad(Guid idProyecto)
        {

            var Entidad = (from v in contexto.ProyectoDidactico
                           where v.IdProyectoDidactico == idProyecto &&
                                    v.Eliminado != true
                           select v).First();
            return Entidad;

        }


        public List<ViewEntity> ObtenerProyectosDidacticos()
        {
            List<ViewEntity> ListaFinal = new List<ViewEntity>();

            var ListaProyectos = (from v in contexto.ProyectoDidactico
                               where   v.Eliminado != true
                               select v).ToList();



            if (ListaProyectos.Count > 0)
            {

                foreach (var item in ListaProyectos)
                {
                        ListaFinal.Add(new ViewEntity(item.IdProyectoDidactico, item.NombreProyectoDidactico));

                }

            }

            return ListaFinal;

        }





    }
}
